/**
 * @description util controller
 * @author malin
 */

const { SuccessModel, ErrorModel } = require('../model/ResModel')
const { uploadFileSizeFailInfo } = require('../model/ErrorInfo')
// promise版的fs模块
const fse = require('fs-extra')
const path = require('path')

// 文件最大体积是1M
const MAX_SIZE = 1024 * 1024 * 1024
// 存储目录
const DIST_FOLDER_PATH = path.join(__dirname, '..', '..', 'uploadFiles')
// 判断是否需要创建目录（只会执行一次）
fse.pathExists(DIST_FOLDER_PATH).then(exist => {
    if(!exist) {
        fse.ensureDir(DIST_FOLDER_PATH)
    }
})

/**
 * 保存文件
 * @param {string} name 文件名
 * @param {string} type 文件类型
 * @param {number} size 文件大小
 * @param {string} filePath 文件路径
 */
async function saveFile({ name, type, size, filePath }) {
    if(size > MAX_SIZE) {
        // 先删除掉默认上传保存的文件
        await fse.remove(filePath)
        return new ErrorModel(uploadFileSizeFailInfo)
    }
    // 移动文件
    // 防止重名
    const fileName = Date.now() + '.' + name
    // 目的地
    const distFilePath = path.join(DIST_FOLDER_PATH, fileName)
    await fse.move(filePath, distFilePath)
    // 返回图片地址
    return new SuccessModel({
        url: '/' + fileName
    })
}

module.exports = {
    saveFile
}
